#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    char *pStr = malloc( 20 );
    strcpy( pStr, "First Word" );

    pid_t pid = fork();

    if ( pid == -1 )
    {
        perror( "fail fork" );
        return -1;        
    }
    if ( pid > 0 )
    {
        strcpy( pStr, "Changed Word" );
        printf( "Parent -- pStr: Add = %p, string = %s\n", pStr, pStr );
    }
    else if ( pid == 0 )
    {
        printf( "Child  -- pStr: Add = %p, string = %s\n", pStr, pStr );
    }
    return 0;
}

/*
程序功能
    malloc 一个char空间, 在父进程中给字符串赋值, 并打印.
    在子进程中直接打印 地址 和 字符串.
    结果: 显示的地址一样, 打印输出的字符串却不一样.

涉及函数
    fork
    malloc

知识要点
    4G虚拟内存空间, 在虚拟空间中的地址一样, 但是实际映射的内存是独立的, 所以字符串的值是独立的.
*/
